package com.hc.controller;

import com.hc.common.bean.PageBean;
import com.hc.common.bean.Result;
import com.hc.common.bean.ResultUtil;
import com.hc.common.utils.ControllerUtil;
import com.hc.domain.Category;
import com.hc.query.SearchVO;
import com.hc.query.CategoryVO;
import com.hc.res.CategoryDTO;
import com.hc.service.CategoryService;
import com.hc.trans.CategoryTrans;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

/**
 * @ClassName: CategoryController
 * @Description: 分类模块
 * @date:2021/11/24 17:27
 * @author: zhitb
 * @Version: 1.0
 **/
@Slf4j
@Controller
@RequestMapping("/category")
public class CategoryController {
    @Resource
    private CategoryService categoryService;

    /**
     * 根据查询条件查询启用状态分类信息
     * @param pageNum 当前页
     * @param pageSize 每页数据量
     * @param searchVO 查询条件
     * @param mav 返回数据
     * @return
     */
    @GetMapping("/getCategoryByCondition/{pageNum}/{pageSize}")
    public ModelAndView getCategoryByCondition(
            @PathVariable("pageNum") Integer pageNum,
            @PathVariable("pageSize") Integer pageSize,
            SearchVO searchVO,
            ModelAndView mav,
            String s) {
        CategoryVO  categoryVO = new CategoryVO();
        if(!("4".equals(s))){
            categoryVO.setStatus(s);
        }
        // 查找条件封装
        ControllerUtil.initParam(categoryVO, searchVO);
        // 查询技术列表数据
        PageBean<Category> categoryPageBean = categoryService.selectPageByCondition(pageNum, pageSize, categoryVO);
        // 数据转换
        PageBean<CategoryDTO> categoryDTOPageBean = CategoryTrans.MAPPER.category2CategoryDTO(categoryPageBean);
        // 存储路径
        categoryDTOPageBean.setUrl("category/getCategoryByCondition");
        // 存储返回的 技术列表数据
        mav.addObject("pageBean", categoryDTOPageBean);
        //返回查询条件
        mav.addObject("searchKey", searchVO.getSearchKey());
        mav.addObject("searchValue", searchVO.getSearchValue());
        mav.addObject("title", "分类列表");
        mav.addObject("status",s);
        mav.setViewName("category/list");
        return mav;
    }
    /**
     * 删除分类
     *
     * @param id
     * @param mav
     * @return
     */
    @ResponseBody
    @DeleteMapping("/removeById/{id}")
    public Result removeById(@PathVariable("id") Long[] id, ModelAndView mav) {
        //删除成功的数量
        int deleteRes = 0;
        //遍历需要删除的项目id数组
        for (int i = 0; i < id.length; i++) {
            //成功删除一次，成功数量加1
            deleteRes += categoryService.deleteByPrimaryKey(id[i]);
        }
        //删除成功的个数和需要删除的个数相同，则删除成功
        if (deleteRes == id.length) {
            return ResultUtil.success().setMsg("删除成功");
        } else {
            return ResultUtil.success().setMsg("删除失败");
        }
    }
    /**
     * 添加分类
     * @param name 分类名
     * @return
     */
    @ResponseBody
    @PostMapping("/addCategory")
    public Result addCategory(String name){
        Category category=Category.builder()
                .name(name)
                .status(1)
                .build();
        int i = categoryService.insertSelective(category);
        if(i==1){
            return ResultUtil.success().setMsg("添加成功！");
        }
        return ResultUtil.fail().setMsg("添加失败！");
    }
    /**
     * 批量启用分类
     *
     * @param id
     * @param mav
     * @return
     */
    @ResponseBody
    @PostMapping("/activeById/{id}")
    public Result activeById(@PathVariable("id") Long[] id, ModelAndView mav) {
        //启用成功的数量
        int deleteRes = 0;
        //遍历需要启用的项目id数组
        for (int i = 0; i < id.length; i++) {
            //成功启用一次，成功数量加1
            deleteRes += categoryService.avctiveByPrimaryKey(id[i]);
        }
        //启用成功的个数和需要启用的个数相同，则启用成功
        if (deleteRes == id.length) {
            return ResultUtil.success().setMsg("启用成功");
        } else {
            return ResultUtil.success().setMsg("启用失败");
        }
    }
    /**
     * 批量禁用分类
     *
     * @param id
     * @param mav
     * @return
     */
    @ResponseBody
    @PostMapping("/disabledById/{id}")
    public Result disabledById(@PathVariable("id") Long[] id, ModelAndView mav) {
        //禁用成功的数量
        int deleteRes = 0;
        //遍历需要禁用的项目id数组
        Category category = new Category();
        for (int i = 0; i < id.length; i++) {
            //成功禁用一次，成功数量加1
            deleteRes += categoryService.disabledByPrimaryKey(id[i]);
        }
        //禁用成功的个数和需要启用的个数相同，则禁用成功
        if (deleteRes == id.length) {
            return ResultUtil.success().setMsg("禁用成功");
        } else {
            return ResultUtil.success().setMsg("禁用失败");
        }
    }
}